In general, a Dynamic Random Access Memory (DRAM) should open a row for each bank to use due to a characteristic thereof. When a row address corresponding to a command is different from a row address being currently used, the DRAM should close the corresponding row and then reopen the row corresponding to the row address of the command to use it.
At this time, respective DRAM memories have their waiting time to perform open, close, read, and write commands for the memory row. A row locality technology has been proposed to solve the above problems and corresponds to a scheme in which a memory controller first processes a request having the same row address as that of the open row of the memory. That is, according to the row locality technology, it is possible to reduce the time to close and reopen the row by opening a particular row address and then processing a request having the same row address, thereby increasing utilization.
The memory controller can use only a scheduler buffer having a limited size due to a characteristic of a System on Chip (SoC) structure. A size of the scheduler buffer is a very important element in determining the utilization. Accordingly, in a method of increasing the utilization through the scheduler buffer having the limited size, the memory controller may receive an input of a request having high row buffer locality by the scheduler buffer to perform scheduling or may increase the limited buffer size to allow various selections. The increase in the buffer size results in larger costs.
Further, as another method of increasing the utilization, there is a method of reducing read/write switching. Specifically, there is waiting time to perform a write command after performing a read command in the memory and waiting time to perform a read command after performing a write command. Accordingly, the utilization may vary at 50% or more depending on the performance orders of the memory commands (open, close, read, and write).
Another method may increase efficiency by securing various requests for respective banks and processing the request according to each bank. Specifically, requests for respective banks are maximized by asking an interface buffer for the smallest number of requests for respective banks existing in a scheduler buffer.